那 Java 是如何知道/判斷,在 try-with-resource 陳述式裡的物件是可以關閉(close)的呢?
在 Java SE 7 裡有一個新的介面(Interface)叫 java.lang.AutoCloseable,裡面只定義了一個 close 的方法,所以實作這個介面的類別,其所生成的物件,都可以放在 try-with-resource 陳述式裡執行。所以我們來自己寫一個實作 java.lang.AutoCloseable 的類別:
package idv.jacky.ironman4.day22;
public class MyResource1 implements AutoCloseable{
@Override
public void close() throws Exception {
System.out.println("Close resource 1.");
}
}
我們把實作 java.lang.AutoCloseable 的類別命名為 MyResource1,然後實作 close 這個方法,裡面只叫 Java 印出 "Close resource 1" 這個字串。接著我們來看看怎麼使用它:
package idv.jacky.ironman4.day22;
public class Day22Example1 {
public static void main (String[] args) throws Exception {
try (MyResource1 r1 = new MyResource1()) {
System.out.println("Do something...");
}
}
}
就像昨天的範例一樣,我們在 try-with-resource 陳述式裡宣告了一個 MyResource1 的物件 r1,然後再 try 區塊裡印出 "Do something…" 的字串。然後下面就是程式執行的結果:
Java 會先執行第7行,印出 "Do something…"後,離開 try 區塊時會去關閉實作 java.lang.AutoCloseable 的 MyResource1 物件,而在 MyResource1.close 的方法裡我們請 Java 印出 "Close resource 1"。因為我們沒有 catch 區塊來補捉 close 方法可能丟出來的例外,所以我們要在 main 方法的宣告上多宣告會丟出 Exception 例外!
這樣是不是有點初步的概念了呢!